package com.ruoyi.common.utils.pinyin4j;

import java.util.HashMap;
import java.util.Map;

/**
 * 拼音工具类
 * 
 * @author ruoyi
 */
public class PinyinUtil
{
    // 简单的中文到拼音映射（可根据需要扩展）
    private static final Map<String, String> PINYIN_MAP = new HashMap<>();
    
    static {
        // 常用岗位相关汉字映射
        PINYIN_MAP.put("董", "dong");
        PINYIN_MAP.put("事", "shi");
        PINYIN_MAP.put("长", "zhang");
        PINYIN_MAP.put("项", "xiang");
        PINYIN_MAP.put("目", "mu");
        PINYIN_MAP.put("经", "jing");
        PINYIN_MAP.put("理", "li");
        PINYIN_MAP.put("人", "ren");
        PINYIN_MAP.put("力", "li");
        PINYIN_MAP.put("资", "zi");
        PINYIN_MAP.put("源", "yuan");
        PINYIN_MAP.put("普", "pu");
        PINYIN_MAP.put("通", "tong");
        PINYIN_MAP.put("员", "yuan");
        PINYIN_MAP.put("工", "gong");
        PINYIN_MAP.put("技", "ji");
        PINYIN_MAP.put("术", "shu");
        PINYIN_MAP.put("总", "zong");
        PINYIN_MAP.put("副", "fu");
        PINYIN_MAP.put("财", "cai");
        PINYIN_MAP.put("务", "wu");
        PINYIN_MAP.put("主", "zhu");
        PINYIN_MAP.put("管", "guan");
        PINYIN_MAP.put("市", "shi");
        PINYIN_MAP.put("场", "chang");
        PINYIN_MAP.put("销", "xiao");
        PINYIN_MAP.put("售", "shou");
        PINYIN_MAP.put("产", "chan");
        PINYIN_MAP.put("品", "pin");
        PINYIN_MAP.put("研", "yan");
        PINYIN_MAP.put("发", "fa");
        PINYIN_MAP.put("运", "yun");
        PINYIN_MAP.put("维", "wei");
        PINYIN_MAP.put("测", "ce");
        PINYIN_MAP.put("试", "shi");
        PINYIN_MAP.put("设", "she");
        PINYIN_MAP.put("计", "ji");
        PINYIN_MAP.put("师", "shi");
    }

    /**
     * 将中文转换为拼音
     * 
     * @param chinese 中文字符串
     * @param separator 分隔符
     * @return 拼音字符串
     */
    public static String getPinyin(String chinese, String separator)
    {
        if (chinese == null || chinese.isEmpty())
        {
            return "";
        }

        StringBuilder pinyin = new StringBuilder();
        for (int i = 0; i < chinese.length(); i++)
        {
            String ch = String.valueOf(chinese.charAt(i));
            
            // 如果是中文字符，尝试转换
            if (isChinese(ch.charAt(0)))
            {
                String py = PINYIN_MAP.get(ch);
                if (py != null)
                {
                    pinyin.append(py);
                }
                else
                {
                    // 如果映射表中没有，使用字符的Unicode值生成
                    pinyin.append("ch").append(Integer.toHexString(ch.charAt(0)));
                }
            }
            else if (isEnglishOrNumber(ch.charAt(0)))
            {
                // 如果是英文或数字，直接添加
                pinyin.append(ch);
            }
            
            // 添加分隔符
            if (separator != null && !separator.isEmpty() && i < chinese.length() - 1)
            {
                pinyin.append(separator);
            }
        }

        return pinyin.toString();
    }

    /**
     * 判断字符是否为中文
     * 
     * @param c 字符
     * @return 是否为中文
     */
    private static boolean isChinese(char c)
    {
        return c >= 0x4E00 && c <= 0x9FA5;
    }

    /**
     * 判断字符是否为英文或数字
     * 
     * @param c 字符
     * @return 是否为英文或数字
     */
    private static boolean isEnglishOrNumber(char c)
    {
        return (c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z') || (c >= '0' && c <= '9');
    }

    /**
     * 将中文字符串转换为拼音首字母
     * 
     * @param chinese 中文字符串
     * @return 拼音首字母
     */
    public static String getFirstLetter(String chinese)
    {
        if (chinese == null || chinese.isEmpty())
        {
            return "";
        }

        StringBuilder firstLetter = new StringBuilder();
        for (int i = 0; i < chinese.length(); i++)
        {
            String ch = String.valueOf(chinese.charAt(i));
            
            if (isChinese(ch.charAt(0)))
            {
                String py = PINYIN_MAP.get(ch);
                if (py != null && !py.isEmpty())
                {
                    firstLetter.append(py.charAt(0));
                }
            }
            else if (isEnglishOrNumber(ch.charAt(0)))
            {
                firstLetter.append(ch);
            }
        }

        return firstLetter.toString();
    }
}

